package cn.jetpiece.cloud.joss.api.object.model.params;

import cn.jetpiece.cloud.joss.api.object.model.enums.AclEnum;
import cn.jetpiece.cloud.joss.api.object.model.enums.PutObjectModelEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

/**
 * @author XuJZ
 * @since 2020/9/10
 */
@Data
@ApiModel
public class JossPutObject {

    /**
     * 统一认证中心颁发的token,内部调用不需要传
     */
    @ApiModelProperty(value = "统一认证中心颁发的token,内部调用不需要传")
    private String token;

    /**
     * 前端直连临时token
     */
    @ApiModelProperty(value = "前端直连临时token")
    private String jossToken;

    /**
     * 分片上传任务Id
     */
    @ApiModelProperty(value = "分片上传任务Id")
    private String uploadId;

    /**
     * 分片上传,分片号
     */
    @Min(value = 1, message = "范围是1~10000")
    @Max(value = 10000, message = "范围是1~10000")
    @ApiModelProperty(value = "分片号，范围是1~10000")
    private Integer partNumber;

    /**
     * 分片上传,分片大小
     */
    @Min(value = 100 * 1024, message = "最小100KB")
    @Max(value = 10 * 1025 * 1024, message = "最大10M")
    @ApiModelProperty(value = "分片大小，单位：字节，最小100KB，最大10M")
    private Long partSize;

    /**
     * 分片上传,偏移量
     */
    @ApiModelProperty(value = "分片上传,偏移量，首个分片为0")
    private Long offset;

    /**
     * 分片上传,分片MD5值
     */
    @ApiModelProperty(value = "分片上传,分片MD5值")
    private String contentMd5;

    /**
     * 文件类型
     */
    @ApiModelProperty(value = "文件类型")
    private String contentType;

    /**
     * 上传对象模式
     * 1: 流式上传
     * 2: Base64编码上传
     * 3: 通过Url上传
     * 默认流式上传
     *
     * @see PutObjectModelEnum
     */
    @ApiModelProperty(value = "上传模式")
    private Integer model = 1;

    /**
     * 数据权限(1:私有,2:公共可读),没传使用桶策略,Minio对象无法设置
     *
     * @see AclEnum
     */
    @ApiModelProperty(value = "数据权限(1:私有,2:公共可读),没传使用桶策略,Minio对象无法设置")
    private Integer acl;

}
